/************************************************************************/
/*                     Copyright declaration                            */
/*                         (3-clause-BSD)                               */
/************************************************************************/

/*
* Copyright (c) 2009, Roc King
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
*     * Redistributions of source code must retain the above copyright
*       notice, this list of conditions and the following disclaimer.
*     * Redistributions in binary form must reproduce the above copyright
*       notice, this list of conditions and the following disclaimer in the
*       documentation and/or other materials provided with the distribution.
*     * Neither the name of the OwnWaterloo,Roc King nor the
*       names of its contributors may be used to endorse or promote products
*       derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/


#include <stdio.h>
#include <stdlib.h>

#include "../retrieve.h"
#include "callback_with_global.h"

int CC_STDCALL print_all(node* n) {
    printf("%d ",n->value);
    return continue_enumerate;
}

int main() {

    node array_list[] = { {86},{1212},{326},{1212},{86}, };
    node* const last = array_list + sizeof(array_list)/sizeof(array_list[0]);
    node* p = 0;

    printf("print all the values:\n");
    retrieve_array_list(array_list,last,print_all);
    printf("\n\n");

    find_key = 1212;
    p = retrieve_array_list(array_list,last,find_if);
    if (p == last) {
        printf("no value equals to %d\n",find_key);
    } else {
        printf("find %d , first index=%d\n",find_key,p - array_list);
    }

    find_key = 326;
    p = retrieve_array_list(array_list,last,find_if);
    if (p == last) {
        printf("no value equals to %d\n",find_key);
    } else {
        printf("find %d , first index=%d\n",find_key,p - array_list);
    }

    assign_value = 1986;
    retrieve_array_list(array_list,last,assign_all);

    printf("\nprint all the values:\n");
    retrieve_array_list(array_list,last,print_all);
    printf("\n\n");

    printf("press Enter to eixt\n");
    (void)getchar();
    return 0;
}
